package com.yungu.swift.order.service;


import com.yungu.swift.base.ResponseData;
import com.yungu.swift.base.model.PageVo;
import com.yungu.swift.base.model.admin.AdminParam;
import com.yungu.swift.order.model.param.*;
import com.yungu.swift.order.model.vo.*;
import com.yungu.swift.system.sys.model.param.AdminAssetsPageAdmin;

import java.util.List;
import java.util.Map;

/**
 * Created by cuixiuyin on 2018/10/13.
 * <p>
 * 订单管理后台业务相关
 **/

public interface OrderAdminService {

    /**
     * 后台新建订单
     *
     * @param orderParam 新建订单参数
     * @return AjaxList
     */
    ResponseData<Boolean> createOrder(AdminOrderParam orderParam);

    /**
     * 后台-订单-通用订单（专车/快车/出租车）分页列表
     *
     * @param orderPageParam 分页参数
     * @return PageVo
     */
    ResponseData<PageVo<AdminGeneralOrderVo>> queryPageCommon(AdminOrderPageParam orderPageParam);

    /**
     * 后台-订单-通用订单（专车/快车/出租车）导出
     *
     * @param orderPageParam
     * @return
     */
    ResponseData<List<AdminGeneralOrderVo>> exportCommon(AdminOrderPageParam orderPageParam);

    /**
     * 后台获取 乘客/司机 的资产关联订单列表
     *
     * @param assetsPageAdmin 参数
     * @return Map
     */
    ResponseData<PageVo<JsonOrderListVo>> orderQueryPage(AdminAssetsPageAdmin assetsPageAdmin);

    /**
     * 后台关闭订单
     *
     * @param assOrCloseParam 关闭订单参数
     * @return AjaxList
     */
    ResponseData<Boolean> close(AdminAssOrCloseParam assOrCloseParam);

    /**
     * 关闭出租车订单
     *
     * @param assOrCloseParam 关闭出租车订单参数
     * @return AjaxList
     */
    ResponseData<Boolean> closeTaxiOrder(AdminAssOrCloseParam assOrCloseParam);

    /**
     * 异常备注
     *
     * @param abnormalParam 异常备注参数
     * @return
     */
    ResponseData<Boolean> abnormalRemark(AdminOrderAbnormalParam abnormalParam);


    // 后台跨城小件业务处理

    /**
     * 获取未派单跨城拼车与小件订单
     *
     * @return
     */
    ResponseData<PageVo<AdminChildOrderInfoVo>> notAssignJoinOrderPage(AdminJoinRelateParam adminJoinRelateParam);

    /**
     * 获取已指派司机的跨城拼车与小件订单
     *
     * @return
     */
    ResponseData<PageVo<AdminMainOrderInfoVo>> yetAssignJoinOrderPage(AdminJoinRelateParam adminJoinRelateParam);

    /**
     * 导出已指派订单
     *
     * @return
     */
    ResponseData<List<AdminMainOrderInfoVo>> exportYetAssignJoinOrder(AdminJoinRelateParam adminJoinRelateParam);

    /**
     * 可派单司机列表
     *
     * @param queryParam
     * @return
     */
    ResponseData<PageVo<JoinOrderAssignVo>> queryByAssign(AdminCrosstownAssignQueryParam queryParam);

    /**
     * 统计拼车各个状态数量
     *
     * @param adminParam
     * @return
     */
    ResponseData<AdminJoinCountVo> countJoinOrder(AdminParam adminParam);

    /**
     * 合并派单待出发订单查询
     *
     * @return
     */
    ResponseData<PageVo<JoinOrderAssignVo>> mergeAssignOrderQuery(AdminMergeOrderPageParam mergeOrderPageParam);

    // 后台订单相关其他处理

    /**
     * 后台获取发票详情列表
     *
     * @param orderInvoicePageParam
     * @return
     */
    ResponseData<PageVo<AdminOrderInvoiceDetailVo>> orderInvoicePage(AdminOrderInvoicePageParam orderInvoicePageParam);

    /**
     * 监控地图今日订单
     *
     * @param mapTodayOrderParam 参数
     * @return Map
     */
    ResponseData<PageVo<AdminMapTodayOrderVo>> orderTodayList(AdminMapTodayOrderPageParam mapTodayOrderParam);

    /**
     * 监控地图订单详情
     *
     * @param orderUuid 订单 uuid
     * @return AdminMapTodayOrderVo
     */
    ResponseData<AdminMapTodayOrderVo> mapOrderDetail(String orderUuid);

    /**
     * 跨城主单详情
     *
     * @return
     */
    ResponseData<Map<String, Object>> mainOrderDetail(String mainOrderUuid);


    /**
     * 跨城重新派单
     *
     * @return
     */
    ResponseData<Boolean> reAssign(String orderUuid);

}